package modelo;




import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;




@Entity
@Table(name= "Cursos")
public class Curso {
	
	@Id

	private int Id_Curso;
	
	@Column(name = "nombre")
	private String nombre_Curso;

	@Column(name="cantidadAlumnos")
	private int cantidad;
	
	@OneToMany (cascade=CascadeType.ALL) 
	@JoinColumn(name = "Id_Curso") 
	@LazyCollection(LazyCollectionOption.FALSE)
    private List<HorasMateria> horasmaterias;
	
	@OneToMany (cascade=CascadeType.ALL) 
	@JoinColumn(name = "Id_Curso") 
	@LazyCollection(LazyCollectionOption.FALSE)
	private List<Cronograma> cronogramas;
	
	public Curso(int id, String nombre ,int cantidad) {
		super();
		this.Id_Curso=id;
		this.nombre_Curso=nombre;
		this.cantidad = cantidad;
	
	}
	
	public int getId() {
		return Id_Curso;
	}
	public void setId(int id) {
		this.Id_Curso = id;
	}
	
	public String getNombre() {
		return nombre_Curso;
	}
	public void setNombre(String nombre) {
		this.nombre_Curso = nombre;
	}
	public Curso() {
		super();
	}

	
	public int getCantidad() {
		return cantidad;
	}
	public void setCantidad(int cantidad) {
		this.cantidad = cantidad;
	}

	public List<HorasMateria> getHorasmaterias() {
		return horasmaterias;
	}
	public void setHorasmaterias(List<HorasMateria> horasmaterias) {
		this.horasmaterias = horasmaterias;
	}
	
	public void agregarHorasMaterias(HorasMateria hm){
		for(int i = 0;i<horasmaterias.size();i++)
		{
			if(horasmaterias.get(i).getMateria().getId() == hm.getMateria().getId())
			{
				return;
			}
		}
		this.horasmaterias.add(hm);
	}
	
	public int cantidadDeHorasDeMateria(Materia m)
	{
		for(int i = 0;i<horasmaterias.size();i++)
		{
			if(horasmaterias.get(i).getMateria().getId() == m.getId())
			{
				return horasmaterias.get(i).getHoras();
			}
		}
		return 0;
	}
	
	public List<Disponibilidad> dameTurnosOcupados()
	{
		List<Disponibilidad> resultado = new ArrayList<Disponibilidad>();
		
		for(int i=0;i<cronogramas.size();i++)
		{
			resultado.add(cronogramas.get(i).getDisponibilidad());
		}
		
		return resultado;
	}
}
